package com.nlgc365.designpattern.Chapter04_Pattern.Behavior.P01_Observer.MiniEventBus;

import java.util.concurrent.Executor;

/**
 * 作用: 同步阻塞的方式通知观察者
 */
public class EventBus {
    // 属性1: 注册表
    private ObserverRegistry registry;
    // 属性2: 线程池
    private Executor executor;

    public EventBus() {
        // 用于创建一个只提供单线程的Executor
        // this.executor = ;
    }

    /**
     * 作用: 由异步EventBus继承, 提供异步非阻塞的线程池
     *
     * @param executor 传递自定义的线程池,
     */
    public EventBus(Executor executor) {
        this.executor = executor;
        this.registry = new ObserverRegistry();
    }

    //方法1: 注册观察者
    public void registerObserver(Object observer) {
        // Step1: 解析观察者的方法, 得到(参数类型, 类-方法)
        // 根据当前字节码对象, 获取到所有方法对象, 或者是所有注解的方法
        // 根据上面有指定Subscribe注解的方法, 创建实例存储起来
        // Step2: 将上步的解析结果, 作为键值对(参数类型: (实例: 类-方法))存储在注册表中
    }

    //方法2: 移除观察者
    public void removeObserver(Object observer) {
        // 在注册表中移除指定的观察者
    }

    //方法3: 同步阻塞发送消息
    public void post(Object message) {
        // Step1: 根据参数类型, 在注册表中查询对应的类-方法
        // Step2: 反射执行观察者的方法
    }
}
